package myThread;

public class Foodie extends Thread {
    private Desk desk;

    public Foodie(Desk desk) {
        this.desk = desk;
    }

    @Override
    public void run() {
        /*1. 判断是否有资源
        * 2. 如果没有就等待，有就使用
        * 3. 使用完后资源总数量减一，唤醒生产者*/
        while(true){
            synchronized(desk.getLock()){
                if(desk.getCount() == 0){
                    break;
                } else {
                    if(desk.isFlag()){
                        // 有资源。
                        System.out.println("消费者正在消费！");
                        // 使用完资源后，将临界资源置空。
                        desk.setFlag(false);
                        // 唤醒生产者
                        desk.getLock().notifyAll();
                        desk.setCount(desk.getCount() - 1);
                    }else{
                        // 没有资源就等待。
                        // 使用什么对象的锁，就得用什么对象的等待和唤醒方法。
                        try {
                            desk.getLock().wait();
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                    }
                }
            }
        }
    }
}
